#include <sys/shm.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <string.h>

int main(int argc, char const *argv[])
{
    key_t key;
    int shm_id;
    char *ptr;
    key = ftok(".", 10);
    shm_id = shmget(key, 100, IPC_CREAT | SHM_W | SHM_R);  // 创建一个100字节的共享内存
    printf("shm_id=%d\n", shm_id);
    if ((ptr = (char *)shmat(shm_id, NULL, SHM_RDONLY)) == NULL) { // 只读的方式挂载 如果第三个参数传0那么
        if (shmctl(shm_id, IPC_RMID, NULL) == -1) {
            perror("删除共享内存失败");
        }
        exit(EXIT_FAILURE);
    }
    printf("共享内存的地址是 %p\n", ptr);
    printf("准备写数据到共享内存\n");
    *ptr = 'd'; // 写
    printf("*ptr=%c\n", *ptr);
    shmdt(ptr);// 卸载
    shmctl(shm_id, IPC_RMID, NULL); // 后面这两句不会执行 需要使用ipcrm删除
    return 0;
}
